package com.ocl.www.utils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by Administrator on 2016/12/16.
 */
public class OutServerUntils {

    //private static String targetURL = "http://192.168.1.39:8012/ocl-search-server/solrArticleController/queryDocsTest";
    //private static final String targetURL = "http://192.168.1.39:8012/ocl-search-server/article/selectAllArticle";

    /**
     * 处理get请求.
     * @param url  请求路径
     * @return  json
     */
    public String get(String url,String sendstr){
        //实例化httpclient
        CloseableHttpClient httpclient = HttpClients.createDefault();
        //实例化get方法
        HttpGet httpget = new HttpGet(url);

        try {
            httpget.setURI(new URI(httpget.getURI().toString() + "?" + sendstr));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        //请求结果
        CloseableHttpResponse response = null;
        String content ="";
        try {
            //执行get方法
            response = httpclient.execute(httpget);
            if(response.getStatusLine().getStatusCode()==200){
                content = EntityUtils.toString(response.getEntity(),"utf-8");
                System.out.println(content);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }


    /**
     * 处理post请求.
     * @param url  请求路径
     * @param params  参数
     * @return  json
     */
    public String post(String url,Map<String, String> params){
        //实例化httpClient
        CloseableHttpClient httpclient = HttpClients.createDefault();
        //实例化post方法
        HttpPost httpPost = new HttpPost(url);
        //处理参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        Set<String> keySet = params.keySet();
        for(String key : keySet) {
            nvps.add(new BasicNameValuePair(key, params.get(key)));
        }
        //结果
        CloseableHttpResponse response = null;
        String content="";
        try {
            //提交的参数
            UrlEncodedFormEntity uefEntity  = new UrlEncodedFormEntity(nvps, "UTF-8");
            //将参数给post方法
            httpPost.setEntity(uefEntity);
            //执行post方法
            response = httpclient.execute(httpPost);
            if(response.getStatusLine().getStatusCode()==200){
                content = EntityUtils.toString(response.getEntity(),"utf-8");
                System.out.println(content);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }



    public static String callInterface(String targetURL,String input,String requestMethod,String contentType){
        String output = null;

        try {
            URL targetUrl = new URL(targetURL);
            HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
            httpConnection.setDoOutput(true);
            httpConnection.setRequestMethod(requestMethod);
            httpConnection.setRequestProperty("Content-Type", contentType);

            //String input = "{\"id\":1,\"firstName\":\"Liam\",\"age\":22,\"lastName\":\"Marco\"}";
            //String input = "{\"solrdata\":234}";
            ///String input = "{}";
            OutputStream outputStream = httpConnection.getOutputStream();
            outputStream.write(input.getBytes("utf-8"));
            outputStream.flush();

            if (httpConnection.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + httpConnection.getResponseCode());
            }

            BufferedReader responseBuffer = new BufferedReader(new InputStreamReader((httpConnection.getInputStream())));

            output = responseBuffer.readLine();
//            System.out.println("Output from Server:\n");
            //while ((output = responseBuffer.readLine()) != null) {
//                System.out.println(output);
            //}

            httpConnection.disconnect();

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return output;
    }

    public static void main(String[] args) {

//        String targetURL = "http://192.168.1.39:8012/ocl-search-server/article/selectAllArticle";
//        String input = "{}";

//        String targetURL = "http://192.168.1.39:8012/ocl-search-server/solrArticleController/queryDocsTest";
//        String input = "{\"solrdata\":234}";
//
//        String data = OutServerUntils.callInterface(targetURL,input,"","application/x-www-form-urlencoded");
//        System.out.println(JSONObject.fromObject(data).get("listarti"));
//        System.out.println(JSONArray.fromObject(JSONObject.fromObject(data).get("listarti")).size());

        OutServerUntils hd = new OutServerUntils();
//		Map<String,String> map = new HashMap();
//		map.put("appid","CALLBELL1");
//		map.put("mtype","query");
//		map.put("timestamp","timestamp");
//		map.put("sign","73fadcd81c2970c0b602d026308266b7");
//		map.put("params","{mobilePhone:15017573651}");
//		hd.post("http://192.168.1.39/cas-server-webapp/api",map);
        String sendstr = "appid=CALLBELL1&mtype=query&timestamp=timestamp&sign=73fadcd81c2970c0b602d026308266b7&params=\'{mobilePhone:15017573651}\'";
        String content = hd.get("http://192.168.1.39/cas-server-webapp/api",sendstr);
        System.out.println(content);
    }
}
